﻿package com.tools
{
	import flash.net.URLLoader;
	import flash.net.URLLoaderDataFormat;
	import flash.net.URLRequest;
	import flash.events.Event;
	import flash.events.HTTPStatusEvent;
	import flash.events.IOErrorEvent;
	import com.tools.notifications.XmlEvent;
	import com.main.CustomDispatcher;
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////////
	// XmlLoader ::
	// - cette classe gère le chargement des fichiers xml
	// - on étend CustomDispatcher pour pouvoir aisément dispatcher des events persos
	/////////////////////////////////////////////////////////////////////////////////////////////////////////
	
	public class XmlLoader extends CustomDispatcher
	{
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		// MEMBRES DE CLASSE
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		// URLLoader nécessaire au chargement du fichier XML
		private var infosLoader					: URLLoader;
		
		// type d'event perso à dispatcher une fois le chargement réussi
		private var typeToDispatch				: String;
		
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		// CONSTRUCTEUR
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		function XmlLoader ( xmlToLoad : String, type : String )
		{
			typeToDispatch = type;
			infosLoader = new URLLoader();
			infosLoader.dataFormat = URLLoaderDataFormat.TEXT;
			infosLoader.addEventListener ( Event.COMPLETE, loadingComplete );
			infosLoader.addEventListener ( HTTPStatusEvent.HTTP_STATUS, codeHTTP );
			infosLoader.addEventListener ( IOErrorEvent.IO_ERROR, loadingFailed );
			infosLoader.load ( new URLRequest (xmlToLoad) );			
		}
		
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		// METHODES PRIVEES : GESTIONNAIRES DE CHARGEMENT
		/////////////////////////////////////////////////////////////////////////////////////////////////////////
		
		private function loadingComplete ( pEvt : Event ) : void
		{
			var donneesXML:XML = new XML ( pEvt.target.data );
			
			if		( typeToDispatch == "skin" )		dispatchEvent ( new XmlEvent ( XmlEvent.LOAD_SKIN_XML_COMPLETE, true, false, donneesXML ) );
			else if	( typeToDispatch == "songlist" )	dispatchEvent ( new XmlEvent ( XmlEvent.LOAD_SONGLIST_XML_COMPLETE, true, false, donneesXML ) );
		}
		
		private function codeHTTP ( pEvt : HTTPStatusEvent ):void
		{
			// affiche : 0
			trace("code HTTP : " + pEvt.status);
		}
		
		private function loadingFailed ( pEvent : IOErrorEvent ):void
		{
			trace("erreur de chargement XmlLoader : " + pEvent.text +"\n");
		}
	}
}